package main

import (
	"net/http"
	"io/ioutil"
	"fmt"
	"time"
	"io"
)

var client *http.Client

//timeout:主机将timeout参数的值设置为主机将允许空闲连接在关闭之前保持打开的时间。 如果主机没有发送或接收数据，则连接处于空闲状态。timeout参数的值为单个整数，单位为秒。
//主机可能保持空闲连接的打开时间长于其指示的时间，但是应该至少保持连接至少等到指定的时间。
//
//max:max参数指示客户端将要生成的最大请求数，或者允许在持久连接上进行的请求。 一旦发送了指定数量的请求和响应，包含参数的主机可能会关闭连接。
//
//Keep-Alive Extensions:可以通过向头添加任意数量的保活活动扩展值来扩展Keep-Alive标题。 任何未被理解的扩展名必须被忽略。
//
//Existing Intermediaries:中间人对具有Keep-Alive标头的HTTP请求的确切影响取决于中间人的类型。
//如果客户端或中介机构检测到具有较短超时时间的不符合规定的中间件或中间框，则将后续请求中发送的Keep-Alive标头修改为同一资源或源服务器。
func init() {
	client = &http.Client{
		Transport: &http.Transport{
			MaxIdleConns:       10,
			IdleConnTimeout:    30 * time.Second,
			DisableCompression: true,
		},
		Timeout: 30 * time.Second,
	}
}

func main() {

	//
	//

	//client := &http.Client{
	//	Transport: &http.Transport{
	//		MaxIdleConns:       10,
	//		IdleConnTimeout:    30 * time.Second,
	//		DisableCompression: true,
	//	},
	//	Timeout: 30 * time.Second,
	//}

	resp, err := client.Post("https://api.some-web.com/v2/events", "application/json", bytes.NewBuffer(eventJson))
	if err != nil {
		fmt.Println(err)
	}
	io.Copy(ioutil.Discard, resp.Body)   // <= NOTE
	defer resp.Body.Close()

	reqest, _ := http.NewRequest("GET", "http://localhost:8001/hello", nil)

	reqest.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
	reqest.Header.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
	reqest.Header.Set("Accept-Encoding", "gzip,deflate,sdch")
	reqest.Header.Set("Accept-Language", "zh-CN,zh;q=0.8")
	reqest.Header.Set("Cache-Control", "max-age=0")
	reqest.Header.Set("Connection", "keep-alive")

	//获取的response.Body必须进行关闭。
	response, _ := client.Do(reqest)
	if response.StatusCode == 200 {
		body, _ := ioutil.ReadAll(response.Body)
		bodystr := string(body)
		fmt.Println(bodystr)
	}
	response.Body.Close()

	reqest1, _ := http.NewRequest("GET", "http://localhost:8001/world", nil)

	reqest.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
	reqest.Header.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
	reqest.Header.Set("Accept-Encoding", "gzip,deflate,sdch")
	reqest.Header.Set("Accept-Language", "zh-CN,zh;q=0.8")
	reqest.Header.Set("Cache-Control", "max-age=0")
	reqest.Header.Set("Connection", "keep-alive")

	response1, _ := client.Do(reqest1)
	if response1.StatusCode == 200 {
		body, _ := ioutil.ReadAll(response.Body)
		bodystr := string(body)
		fmt.Println(bodystr)
	}
	response1.Body.Close()

	response2, _ := client.Do(reqest)
	if response2.StatusCode == 200 {
		body, _ := ioutil.ReadAll(response.Body)
		bodystr := string(body)
		fmt.Println(bodystr)
	}
	response2.Body.Close()
}
